package com.wangcanxuan.www.dao.mapper;

import com.wangcanxuan.www.annotation.orm.*;
import com.wangcanxuan.www.proxy.constants.ReturnDataType;

import java.util.List;

/**
 * 基础类Mapper
 *
 * @author HHLJ
 * @date 2022/04/01
 */
public interface BaseMapper<T> {

    /**
     * 向数据库插入一条记录
     *
     * @param t t
     * @return int
     */
    @Insert
    int insert(T t);

    /**
     * 在数据库删除一条记录
     *
     * @param t t
     * @return int
     */
    @Delete
    int delete(T t);

    /**
     * 在数据库更新一条记录
     *
     * @param t t
     * @return int
     */
    @Update
    int update(T t);

    /**
     * 通过id来查询一条记录，返回对象
     *
     * @param t t
     * @return {@link T}
     */
    @Select
    @ReturnType(returnType = ReturnDataType.OBJECT)
    T selectById(T t);

    /**
     * 通过字段查询一条记录，返回对象
     *
     * @param t t
     * @return {@link T}
     */
    @Select
    @ReturnType(returnType = ReturnDataType.OBJECT)
    T selectOneByFields(T t);

    /**
     * 通过字段查询多条记录，返回对象集合
     *
     * @param t t
     * @return {@link List}<{@link T}>
     */
    @Select
    @ReturnType(returnType = ReturnDataType.LIST)
    List<T> selectListByFields(T t);
}
